package com.data.migration.service;

import com.data.migration.entity.Operation;
import com.data.migration.util.DBUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Peter on 2018/12/8.
 * 迁移1v1课程数据
 */
public class Step_6_Member_Others {
    public static final String step = "6";
    public static final String stepDesc = "学生其他相关信息";

    private static final Logger logger = LoggerFactory.getLogger(Step_6_Member_Others.class);
    public List<Operation> insertSql = new ArrayList<>();//插入课程的sql

    public static void main(String[] args) throws SQLException {
        Step_6_Member_Others step = new Step_6_Member_Others();
        // 1. 学生【td_nt_member】
        step.start();
//        step.clean();

    }

    public void start() throws SQLException {
        logger.info("\n******************************************************************************" +
                "\n======================== Step 6: 迁移学生其他相关信息 start ================================" +
                "\n******************************************************************************\n");
        // 1. 学生上课PPT页数记录【td_nt_memb_course】
//        step_1();
//        step_1_2();
//        step_1_3();
        // 2. 学生资金记录（老版本）【td_nt_memb_found_change】
//        step_2();
//        step_2_2();
        // 3. 学生邀请学生注册记录【td_nt_memb_invitation】
//        step_3();
//        step_3_2();
//        step_3_3();
//
//        step_4();
//        step_4_2();
//
//        step_5();
//        step_5_2();
//        step_5_3();
//        step_5_4();

//        step_6();
//        step_6_2();

//        step_7();
//        step_7_2();
//        step_7_3();

        step_8();
        step_8_2();
        logger.info("\n******************************************************************************" +
                "\n======================== Step 6: 迁移学生其他相关信息 end ================================" +
                "\n******************************************************************************\n");
    }

    public void clean() throws SQLException {
        logger.info("\n******************************************************************************" +
                "\n======================== 【clean】 Step 6: 迁移学生其他相关信息 start =========================" +
                "\n******************************************************************************");
        // 1. 学生上课PPT页数记录【td_nt_memb_course】
        step_1_clean();
        step_2_clean();
        step_3_clean();
        step_4_clean();
        step_5_clean();
        step_6_clean();
        step_7_clean();
        step_8_clean();
        logger.info("\n******************************************************************************" +
                "\n======================== 【clean】 Step 6: 迁移学生其他相关信息 end =========================" +
                "\n******************************************************************************");
    }


    // 1. 学生上课PPT页数记录【td_nt_memb_course】    ------------------------------------------------------------------------------1
    public void step_1() throws SQLException {
        logger.info("\n     --------- 6.1 学生上课PPT页数记录【td_nt_memb_course】 start --------- ");
        // 查询出青少版所有的学生
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "td_nt_memb_course"; // 表名
        String pk = "memb_cou_id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【td_nt_memb_course.memb_id】
    public void step_1_2() throws SQLException {
        String ftableName = "td_nt_memb_course"; // 附表表名
        String fk = "memb_id";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 更新外键【td_nt_memb_course.cou_id】
    public void step_1_3() throws SQLException {
        String ftableName = "td_nt_memb_course"; // 附表表名
        String fk = "cou_id";// 附表外键
        String ptableName = "ts_nt_course_info";//主表的表名
        String pk = "cou_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_1_clean() throws SQLException {
        logger.info("\n     ---------【clean】 6.1 学生上课PPT页数记录【td_nt_memb_course】 start --------- ");
        // 1. 删除新添加的学生
        String sql = "delete from td_nt_memb_course where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 2. 学生资金记录（老版本）【td_nt_memb_found_change】    ------------------------------------------------------------------------------3
    public void step_2() throws SQLException {
        logger.info("\n     --------- 6.2. 学生资金记录（老版本）【td_nt_memb_found_change】 start --------- ");
        // 查询出青少版所有的学生
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "td_nt_memb_found_change"; // 表名
        String pk = "MFCHG_ID"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【td_nt_memb_found_change.memb_id】
    public void step_2_2() throws SQLException {
        String ftableName = "td_nt_memb_found_change"; // 附表表名
        String fk = "MEMB_ID";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_2_clean() throws SQLException {
        logger.info("\n     ---------【clean】 6.2. 学生资金记录（老版本）【td_nt_memb_found_change】 start --------- ");
        // 1. 删除新添加的学生
        String sql = "delete from td_nt_memb_found_change where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 3. 学生邀请学生注册记录【td_nt_memb_invitation】    ------------------------------------------------------------------------------3
    public void step_3() throws SQLException {
        logger.info("\n     --------- 6.3. 学生邀请学生注册记录【td_nt_memb_invitation】 start --------- ");
        // 查询出青少版所有的学生
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "td_nt_memb_invitation"; // 表名
        String pk = "INT_ID"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【td_nt_memb_invitation.INT_MEMB_ID】
    public void step_3_2() throws SQLException {
        String ftableName = "td_nt_memb_invitation"; // 附表表名
        String fk = "INT_MEMB_ID";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }
    // 更新外键【td_nt_memb_invitation.COVER_INT_MEMB_ID】
    public void step_3_3() throws SQLException {
        String ftableName = "td_nt_memb_invitation"; // 附表表名
        String fk = "COVER_INT_MEMB_ID";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_3_clean() throws SQLException {
        logger.info("\n     ---------【clean】 6.2. 学生资金记录（老版本）【td_nt_memb_found_change】 start --------- ");
        // 1. 删除新添加的学生
        String sql = "delete from td_nt_memb_invitation where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 4. 学生新注册用户是否弹红包【td_nt_memb_new_user_scholarship】    ------------------------------------------------------------------------------4
    public void step_4() throws SQLException {
        logger.info("\n     --------- 6.4. 学生新注册用户是否弹红包【td_nt_memb_new_user_scholarship】 start --------- ");
        // 查询出青少版所有的学生
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "td_nt_memb_new_user_scholarship"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【td_nt_memb_new_user_scholarship.INT_MEMB_ID】
    public void step_4_2() throws SQLException {
        String ftableName = "td_nt_memb_new_user_scholarship"; // 附表表名
        String fk = "memb_id";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_4_clean() throws SQLException {
        logger.info("\n     ---------【clean】 6.4. 学生新注册用户是否弹红包【td_nt_memb_new_user_scholarship】 start --------- ");
        // 1. 删除新添加的学生
        String sql = "delete from td_nt_memb_new_user_scholarship where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 5. 学生购买的1v1课程【td_nt_memb_setmeal】    ------------------------------------------------------------------------------5
    public void step_5() throws SQLException {
        logger.info("\n     --------- 6.5. 学生购买的1v1课程【td_nt_memb_setmeal】 start --------- ");
        // 查询出青少版所有的学生
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "td_nt_memb_setmeal"; // 表名
        String pk = "memb_set_id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【td_nt_memb_setmeal.MEMB_ID】
    public void step_5_2() throws SQLException {
        String ftableName = "td_nt_memb_setmeal"; // 附表表名
        String fk = "MEMB_ID";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }
    // 更新外键【td_nt_memb_setmeal.cou_ID】
    public void step_5_3() throws SQLException {
        String ftableName = "td_nt_memb_setmeal"; // 附表表名
        String fk = "cou_ID";//
        String ptableName = "ts_nt_course_info";//主表的表名
        String pk = "cou_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }
    // 更新外键【td_nt_memb_setmeal.set_id】
    public void step_5_4() throws SQLException {
        String ftableName = "td_nt_memb_setmeal"; // 附表表名
        String fk = "set_id";// 附表外键
        String ptableName = "ts_nt_setmeal";//主表的表名
        String pk = "set_id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_5_clean() throws SQLException {
        logger.info("\n     ---------【clean】 6.5. 学生购买的1v1课程【td_nt_memb_setmeal】 start --------- ");
        // 1. 删除新添加的学生
        String sql = "delete from td_nt_memb_setmeal where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 6. 后台更改课时记录【td_nt_memb_setmeal_log】    ------------------------------------------------------------------------------6
    public void step_6() throws SQLException {
        logger.info("\n     --------- 6.6. 后台更改课时记录【td_nt_memb_setmeal_log】 start --------- ");
        // 查询出青少版所有的学生
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "td_nt_memb_setmeal_log"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }
    // 更新外键【td_nt_memb_setmeal_log.memb_id】
    public void step_6_2() throws SQLException {
        String ftableName = "td_nt_memb_setmeal_log"; // 附表表名
        String fk = "memb_id";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }
    // 更新外键【td_nt_memb_setmeal_log.memb_set_id】
    public void step_6_3() throws SQLException {
        String ftableName = "td_nt_memb_setmeal_log"; // 附表表名
        String fk = "memb_set_id";// 附表外键
        String ptableName = "td_nt_memb_setmeal";//主表的表名
        String pk = "memb_set_id"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }
    public void step_6_clean() throws SQLException {
        logger.info("\n     ---------【clean】 6.6. 后台更改课时记录【td_nt_memb_setmeal_log】 start --------- ");
        String sql = "delete from td_nt_memb_setmeal_log where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    // 7. 用户体验课程的分类【td_nt_memb_trail_category】    ------------------------------------------------------------------------------7
    public void step_7() throws SQLException {
        logger.info("\n     --------- 6.7. 用户体验课程的分类【td_nt_memb_trail_category】 start --------- ");
        // 查询出青少版所有的学生
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "td_nt_memb_trail_category"; // 表名
        String pk = "id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }
    // 更新外键【td_nt_memb_trail_category.memb_id】
    public void step_7_2() throws SQLException {
        String ftableName = "td_nt_memb_trail_category"; // 附表表名
        String fk = "memb_id";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }
    // 更新外键【td_nt_memb_trail_category.category_id】
    public void step_7_3() throws SQLException {
        String ftableName = "td_nt_memb_trail_category"; // 附表表名
        String fk = "category_id";// 附表外键
        String ptableName = "ts_nt_category";//主表的表名
        String pk = "cate_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }
    public void step_7_clean() throws SQLException {
        logger.info("\n     ---------【clean】 6.7. 后台更改课时记录【td_nt_memb_trail_category】 start --------- ");
        // 1. 删除新添加的学生
        String sql = "delete from td_nt_memb_trail_category where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }


    // 8. 学生搜索记录【td_nt_search_history】    ------------------------------------------------------------------------------8
    public void step_8() throws SQLException {
        logger.info("\n     --------- 6.8. 学生搜索记录【td_nt_search_history】 start --------- ");
        // 查询出青少版所有的学生
        Connection conn = DBUtil.getConn(Operation.app_type_T);
        String tableName = "td_nt_search_history"; // 表名
        String pk = "sea_his_id"; // 主键（自增）的列名字
        insertSql = DBUtil.buildInsertSql(conn, tableName, pk, step, stepDesc);
        DBUtil.insertBatch(insertSql);
    }

    // 更新外键【td_nt_search_history.memb_id】
    public void step_8_2() throws SQLException {
        String ftableName = "td_nt_search_history"; // 附表表名
        String fk = "memb_id";// 附表外键
        String ptableName = "td_nt_member";//主表的表名
        String pk = "MEMB_ID"; // 主表的主键
        String sql = DBUtil.createUpdateFkSql(ftableName, fk, ptableName, pk);
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }

    public void step_8_clean() throws SQLException {
        logger.info("\n     ---------【clean】 6.8. 学生搜索记录【td_nt_search_history】 start --------- ");
        // 1. 删除新添加的学生
        String sql = "delete from td_nt_search_history where app_type='T'";
        Connection conn = DBUtil.getConn(Operation.app_type_A);
        DBUtil.executeUpdate(conn, sql);
    }


}
